Pacotes utilizados
library(plyr)
library(ggplot2)
library(plyr)
library(dplyr)
library(plotly)
library(Hmisc)
Definição da variável que armazenará os dados principais:
setwd("~/Área de Trabalho/pastaPibic/pastaCorrente")
dados_UFCG <- read.csv("~/Área de Trabalho/programasPIBIC/alunosUFCGAnon.csv")
Qual o impacto das greves no rendimento dos alunos?
Como as greves causam muito impacto na vida de todo o corpo universitário, decidi verificar seus impactos no número de reprovações. De modo rasoável, separei os períodos 2003.4, 2004.1, 2005.1 e 2012.1, nos quais verifiquei ter ocorrido greve, do demais. A partir disso, agrupei os dados por Situação e verifiquei sua porcentagem ou per-mil, ambos para facilitar a visualização.
# Periodos em que houve greve
condition <- c(2003.1, 2004.1, 2005.1, 2012.1, 2015.1)
# Comparando quantidade de faltas, trancamentos e reprovacoes (sem diferenca significativa, no geral, mas há aumento no numero de trancamentos)
num_greve = 97522
num_nao_greve = 846240
# Separando os dados dos períodos que houve greve
dados_greve <- dados_UFCG %>%
filter(as.character(Periodo) == "2003.1" | as.character(Periodo) == "2004.1" | as.character(Periodo) == "2005.1" | as.character(Periodo) == "2012.1")
# Contagem das situações dos alunos (Reprovado, Reprovado por falta, Trancado, Aprovado) de quando houve greve
occurrance <- data.frame(xtabs(~Periodo + Situacao, dados_greve)) %>% mutate(Porcentagem = Freq/num_greve * 100)
# Separando os dados dos períodos que não houve greve
dados_nao_greve <- dados_UFCG %>%
filter(as.character(Periodo) != "2003.1" & as.character(Periodo) != "2004.1" & as.character(Periodo) != "2005.1" & as.character(Periodo) != "2012.1") %>%
group_by(Periodo)
# Contagem das situações dos alunos (Reprovado, Reprovado por falta, Trancado, Aprovado) de quando não houve greve
occurrance_nao_greve <- data.frame(xtabs(~Periodo + Situacao, dados_nao_greve)) %>% mutate(Porcentagem = Freq/num_nao_greve * 1000)
# Plot do número de situações de quando houve greve
ggplot(occurrance, aes(x = occurrance$Situacao,y = occurrance$Freq, fill = occurrance$Periodo)) +
geom_bar(stat="identity") + ylab("Quantidade de alunos") + xlab("Situacao do aluno") +
labs(fill = "Periodo")
#Nao passa boa representatividade
# ggplot(occurances_nao_greve, aes(x = occurances_nao_greve$Situacao,y = occurances_nao_greve$Porcentagem, fill = occurances_nao_greve$Periodo)) +
# geom_bar(stat="identity", position = "dodge") + ylab("Quantidade de alunos") + xlab("Situacao do aluno") +
# labs(fill = "Periodo")
# # Plot de porcentagem de situações por periodo de quando houve greve
# ggplot(occurrance, aes(group = occurrance$Situacao,y = occurrance$Porcentagem, x = occurrance$Periodo, color = occurrance$Situacao)) +
# geom_line(stat="identity") + ylab("Porcentagem de alunos(100%)") + xlab("Periodo") +
# labs(color = "Periodo")
#
# # Plot per mil de situações por periodo de quando não houve greve
# ggplot(occurrance_nao_greve, aes(group = occurrance_nao_greve$Situacao,y = occurrance_nao_greve$Porcentagem, x = occurrance_nao_greve$Periodo, color = occurrance_nao_greve$Situacao)) +
# geom_line(stat="identity") + ylab("Porcentagem de alunos(1000%)") + xlab("Periodo") + theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
# labs(color = "Periodo")
Olhando especificamente para Computação
## Situação dos alunos apenas para cc
# Filtrando alunos de cc
occurrance_cc <-filter(dados_greve, Cod_Curso == 14102100)
occurrance_nao_greve_cc <- dados_nao_greve %>% filter(Cod_Curso == 14102100)
# Contando a frequencia das situacoes e fazendo porcentagem para periodos de greve
occurrance_cc <- data.frame(xtabs(~Periodo + Situacao, occurrance_cc))
num_greve_cc = sum(occurrance_cc$Freq, na.rm = T)
occurrance_cc <- occurrance_cc %>% mutate(Porcentagem = Freq/num_greve_cc * 100)
# Contando a frequencia das situacoes e fazendo porcentagem para periodos de não-greve
occurrance_nao_greve_cc <- data.frame(xtabs(~Periodo + Situacao, occurrance_nao_greve_cc))
num_nao_greve_cc = sum(occurrance_nao_greve_cc$Freq, na.rm = T)
occurrance_nao_greve_cc <- occurrance_nao_greve_cc %>% mutate(Porcentagem = Freq/num_nao_greve_cc *100)
# Plotando grafico para Computacao comparando a situacao dos alunos
#para quando houve e quando não houve greve, separadamente
ggplot(occurrance_cc, aes(group = occurrance_cc$Situacao,y = occurrance_cc$Porcentagem, x = occurrance_cc$Periodo, color = occurrance_cc$Situacao)) +
geom_line(stat="identity") + ylab("Porcentagem de alunos(100%)") + xlab("Periodo") +
labs(color = "Periodo")
ggplot(occurrance_nao_greve_cc, aes(group = occurrance_nao_greve_cc$Situacao,y = occurrance_nao_greve_cc$Porcentagem, x = occurrance_nao_greve_cc$Periodo, color = occurrance_nao_greve_cc$Situacao)) +
geom_line(stat="identity") + ylab("Porcentagem de alunos(100%)") + xlab("Periodo") + theme(axis.text.x = element_text(angle = 90, hjust = 1))
labs(color = "Periodo")
## $colour
## [1] "Periodo"
##
## attr(,"class")
## [1] "labels"
Há impacto o período de ingresso (.1 ou .2) no rendimento do aluno?
A fim de se verificar a necessidade de medidas pedagógicas alternativas, caso necessário, verifiquei a média dos alunos do primeiro perído do ano e do segundo período do ano para cada curso ao longo do intervalo dos dados, checando a possível existência de diferença de rendimento.
detach(package:plyr)
dados_primeiro_periodo <- filter(dados_UFCG, Periodo_Relativo == 1, !is.na(Media_Disciplina)) %>%
group_by(Matricula, Cod_Curso) %>%
mutate(Media_Aluno = mean(Media_Disciplina, rm.na = T))
# Checagem de diferença estatística
dados_periodo.1 <- dados_primeiro_periodo %>% filter((Periodo*10)%%2 != 0)
dados_periodo.2 <- dados_primeiro_periodo %>% filter((Periodo*10)%%2 == 0 && Nome_Curso %in% dados_periodo.1$Nome_Curso)
dados_periodo.1 <- dados_periodo.1 %>% filter(Nome_Curso %in% dados_periodo.2$Nome_Curso)
t.test(dados_periodo.1$Media_Aluno, dados_periodo.2$Media_Aluno)
##
## Welch Two Sample t-test
##
## data: dados_periodo.1$Media_Aluno and dados_periodo.2$Media_Aluno
## t = 6.041, df = 122510, p-value = 1.536e-09
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 0.05628046 0.11033940
## sample estimates:
## mean of x mean of y
## 6.21365 6.13034
# Transformando o Perido em 0, se .1 e 1, caso contrário
dados_primeiro_periodo <- dados_primeiro_periodo %>%
group_by(Periodo, Nome_Curso) %>% mutate(Periodo_Ano = (Periodo*10)%%2, Media_Curso = mean(Media_Aluno))
Gráficos:
plot_ly(data = dados_primeiro_periodo, x = as.character(dados_primeiro_periodo$Periodo), y = dados_primeiro_periodo$Media_Curso, symbol = dados_primeiro_periodo$Periodo_Ano, color = dados_primeiro_periodo$Nome_Curso, type = "scatter", legendgroup =~dados_primeiro_periodo$Nome_Curso )
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
## Warning in RColorBrewer::brewer.pal(N, "Set2"): n too large, allowed maximum for palette Set2 is 8
## Returning the palette you asked for with that many colors